package Calculadora.Stack.StackList;

import Calculadora.Stack.AbstractStack;

/**
 * Nos permite utilizar las listas en el stack, por medio de la extension
 * de la clase abstractstack y la implementacion de list.
 * @author Vinicio Gomez
 * @param <E>  clase generica
 */
public abstract class AbstractList<E> extends AbstractStack implements List<E> 
{
/**
     * Ingresa un objeto al inicio de la pila
     * @param item objeto a ingresar
     * @pre n/a
     * @post el objeto es agregado
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public void push(Object item){
       addFirst((E)item); 
    }
    
    /**
     * Saca el ultimo objeto agregado a la pila
     * @return el ultimo objeto agregado a la pila
     * @pre que la pila no este vacia
     * @post el ultimo objeto agregado a la pila es removido de la misma
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public E pop(){
        return removeFirst();  
    }
    
    /**
     * Se obtiene la referencia del ultimo objeto agregado a la pila
     * @return la referencia del ultimo objeto agregado a la pila
     * @pre que la pila no este vacia
     * @post se retorna la referencia del ultimo objeto agregado a la pila
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public E peek(){
        return getFirst();
    }   
}